const express = require('express');
const cors = require('cors');
const mongoose = require('mongoose');
const dotenv = require('dotenv');
const path = require('path');

// 加载环境变量
dotenv.config();

// 初始化Express应用
const app = express();

// 中间件
app.use(express.json());
app.use(cors());

// 连接MongoDB
const connectDB = async () => {
  try {
    await mongoose.connect(process.env.MONGO_URI || 'mongodb://localhost:27017/green-planet');
    console.log('MongoDB连接成功');
  } catch (err) {
    console.error('MongoDB连接失败:', err.message);
    // 如果连接失败，尝试退出进程
    process.exit(1);
  }
};

connectDB();

// 定义路由
app.use('/api/auth', require('./routes/auth'));
app.use('/api/users', require('./routes/users'));
app.use('/api/activities', require('./routes/activities'));
app.use('/api/planets', require('./routes/planets'));

// 静态资源托管
if (process.env.NODE_ENV === 'production') {
  // 服务静态资源
  app.use(express.static(path.join(__dirname, '../../build')));
  
  app.get('*', (req, res) => {
    res.sendFile(path.resolve(__dirname, '../../build', 'index.html'));
  });
}

// 定义端口
const PORT = process.env.PORT || 5000;

// 启动服务器
app.listen(PORT, () => {
  console.log(`服务器运行在端口 ${PORT}`);
});

// 处理未捕获的Promise拒绝
process.on('unhandledRejection', (err, promise) => {
  console.error(`错误: ${err.message}`);
  // 关闭服务器并退出进程
  app.close(() => process.exit(1));
}); 